package net.lucamasini.ricette.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;

import org.springframework.orm.jpa.JpaCallback;

import net.lucamasini.ricette.server.ActiveRecord;

import com.google.appengine.api.datastore.Text;

@Entity
@XmlRootElement(name = "ricetta")
public class Ricetta extends ActiveRecord {

	private static final long serialVersionUID = 1L;

    @Version
    private Integer version;

    private String titolo;
    
    private Text descrizione = new Text("");
	
	private int tempoPreparazione;
	
	private int difficolta;

	private Integer persone;
	
	@OneToMany(cascade=CascadeType.ALL)
	private List<IngredientiRicetta> ingredientiRicetta = new ArrayList<IngredientiRicetta>();

	public Integer getVersion() {
		return version;
	}

	public void setVersion(Integer version) {
		this.version = version;
	}
	
	public String getDescrizione() {
		return descrizione.getValue();
	}

	public void setDescrizione(String descrizione) {
		this.descrizione = new Text(descrizione);
	}

	public List<IngredientiRicetta> getIngredientiRicetta() {
		return ingredientiRicetta;
	}

	public void setIngredientiRicetta(List<IngredientiRicetta> ingredienti) {
		this.ingredientiRicetta = ingredienti;
	}

	public String getTitolo() {
		return titolo;
	}

	public void setTitolo(String titolo) {
		this.titolo = titolo;
	}

	public Integer getTempoPreparazione() {
		return tempoPreparazione;
	}

	public void setTempoPreparazione(Integer tempoPreparazione) {
		this.tempoPreparazione = tempoPreparazione;
	}

	public Integer getDifficolta() {
		return difficolta;
	}

	public void setDifficolta(Integer difficolta) {
		this.difficolta = difficolta;
	}

	public Integer getPersone() {
		return persone;
	}

	public void setPersone(Integer persone) {
		this.persone = persone;
	}

	public static Ricetta findRicetta(final String id) {
		return em().execute(new JpaCallback<Ricetta>() {

			@Override
			public Ricetta doInJpa(EntityManager em)
					throws PersistenceException {
				
				Ricetta r = em.find(Ricetta.class, id);
				List<IngredientiRicetta> newIRA = new ArrayList<IngredientiRicetta>();
				for(IngredientiRicetta newIr: r.getIngredientiRicetta()) {
					newIRA.add(newIr);
				}
				r.setIngredientiRicetta(newIRA);
				
				return r;
			}
		});
	}	
}
